配置组与另类写法示例

ver.20210818(此为过时旧版,前往首页查看新版)

☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲

mpv.conf 里的参数分为通用参数和配置参数。通用参数在你打开MPV空窗口的同时就已经加载了,而配置参数正常情况下不会加载。 你所见到的 [xxxxx] 这样的文本就是一个配置参数的头部标志,在首个未被注释掉的配置 [xxxxx] 所在行之前的参数都是通用参数,在两个配置 [profile-x][profile-y] 所在行之间的参数都属于 [profile-x] ,这些特性也决定了通用参数只能写在最前面。

配置参数又分为常规配置和条件配置。先讲解一下常规配置,它不会自动触发,下面导入实际例子。

 

基本操作

很多人的 mpv.conf 里都有一条高频的通用参数 --profile=gpu-hq ,它其实就是一套预设参数组的集合。MPV其实预设了不止一套参数组,你可以通过在 mpv.com 文件所在目录打开 PowerShell (空白处 按住Shift+单机鼠标右键)执行 ./mpv --profile=help 得到所有可用的(常规+条件)配置: powershell-01

同样的位置, PowerShell 执行 ./mpv --show-profile=配置名 查看某个配置的实际内容:

所以你在 mpv.conf 中某行写入 --profile=gpu-hq 时实际等效在该位置按顺序写入以上八项实际参数。

 

顺序逻辑

① 通用参数:执行逻辑是从上到下依次读取。 假如你想在 mpv.conf 中启用 --profile=gpu-hq 的同时关闭 --deband ,却这样写:

只会得到相反的结果:MPV先关闭了去色带,再读取 [gpu-hq] 后又打开了去色带功能。正确写法是调换这两行参数的位置。(当然你也可以再往后额外加一行 --deband=no ,但是正常人应该不会这么做)

 

② 配置参数:虽然,实际运行时条件配置的先后触发顺序文档中没有记录(根据观察是相对固定的),但是,常规配置和条件配置参数在 mpv.conf 中没有书写顺序的要求。

 

创造 检验 运用

① 先从常规配置起步 尝试在空白的 mpv.conf 中创造一个简单的常规配置:

保存之后退出,检验: 法(1) 打开MPV空窗口,`键 调出控制台(控制台模式下屏蔽绝大多数快捷键,按Esc关闭)

输入 apply-profile JBLp 执行(回车键)。正常情况是控制台不会有信息显示,此时一次性拖入任意数量的视频,符合预期的表现是当前文件二倍速播放+音调变高+无限单曲循环。

法(2) mpv.conf 内最上方加入通用参数 --profile=JBLp ,即整体修改成如下样式。

之后打开MPV空窗口,一次性拖入任意数量的视频,检查实际表现。

▲ 当然,此时你也可以通过前面的基本操作,可以发现 PowerShell 执行对应命令产生的列表中出现了自己刚写的这个配置 JBLp 。如果你填写了 --profile-desc=<value> ,那么这项值也会显示(见最上方图)

 

② 进阶尝试一个典型的条件配置 在之前的 mpv.conf 中继续修改,以很常见的需求——1080p的视频制定单独方案来举例:

保存之后退出,按设定的条件进行检验:先打开MPV空窗口,调出控制台, --profile-cond 的值如果有书写错误会有类似 [auto_profiles] Profile '1080p' condition:红色文本报错信息,无错再进行下一步。一次性拖入1080p和720p的两个视频,当播放1080p视频时控制台自动弹出文本 [auto_profiles] Applying auto profile: 1080p ,当切换到720p视频时控制台显示 [auto_profiles] Restoring profile: 1080p console-01 你也可以同时查看内置的 stats.lua 统计信息(Shift+i)的第二页共同检验jinc算法的切换是否正常。

▲ 不写或注释掉选用参数 #profile-restore=copy 后,MPV在满足该配置的触发条件后彻底覆盖原参数。该行为类似于自动在控制台输入 apply-profile 1080p

--profile-cond 可以用通用参数作为判定条件,也可以用 https://mpv.io/manual/master/#property-list 里的属性。这些属性需要用引号和中括号规范,单等于号不可用, and or not 分别表示 和 或 非 ,详细示例见后文。

☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲

可能的风险

条件配置的最大局限在于,它并不是直接的开关on/off的关系,自动触发某条件配置后,你在这期间手动激活的其它参数,有可能会随着撤回该条件配置的同时一起被移除,可以通过以下的示例轻松复现问题:

新建空白 input.conf 中写入:

清空 mpv.conf 中写入:

然后打开MPV空窗口,拖入一个视频,已触发条件配置 N-fs-r ,再手动 Ctrl+v 激活去色块滤镜,观察统计信息的滤镜列表: stats-01 进入全屏,假想情况是只撤销 rotate 旋转滤镜,实际是所有视频滤镜都消失了

存在的一个不完美的解决方案是改为非典型条件配置并创建对应的反配置:

再次检验,实际情况符合预期。

配置规范化

通用参数和常规配置可以设计的很复杂,但条件配置应尽量简化以避免实际运行时可能造成的混乱。 在MPV更改目前这个条件配置的机制之前,只有通过相对规范的配置来避免切换中可能存在的问题。虽然配置可以相互套娃,但是最好不要这么做。

一个简单合理的 mpv.conf 示范:

现实情况中设置多重且复杂的条件配置会导致一个播放视频同时调用多个配置,切换下一个视频时只撤销部分配置又拉起新的配置,暂无验证是否在这种情况下产生异常情况,因此示范偏保守只选择分辨率作为变量设置不同组。

 

mpv.conf 的特殊技巧

以下是一份完整的非一般的 mpv.conf 写法,同时运用了上文所叙述的内容。 将所有参数组合配置化(profile),通用区只用单一类参数 --profile=<value> 进行自由灵活搭配,通过组合调用后实际构成一套完整的通用参数。 条件配置主要的是提供范例便于萌新依葫芦画瓢,和其上方的参数一起使用可能存在逻辑上的bug(写的时候没有考虑实际使用)

⇘⇘⇘⇘⇘⇘⇘⇘⇘⇘⇘⇘⇘⇘⇘⇘⇘⇘⇘⇘ mpv.conf ⇙⇙⇙⇙⇙⇙⇙⇙⇙⇙⇙⇙⇙⇙⇙⇙⇙⇙⇙⇙
##== 通用参数区 ==##
##== 常规配置区 ==##
##== 条件配置区 ==##

##下方的可交叉条件显然涉及前文提到的风险,但是重点是列举一些例子以供萌新依葫芦画瓢。

⇗⇗⇗⇗⇗⇗⇗⇗⇗⇗⇗⇗⇗⇗⇗⇗⇗⇗⇗⇗ mpv.conf ⇖⇖⇖⇖⇖⇖⇖⇖⇖⇖⇖⇖⇖⇖⇖⇖⇖⇖⇖⇖

参数分离

相比上方的野路子,这个操作很正经。(这也是20210617之后的懒人包版本所采用的方案) mpv.conf 中的任意位置皆可,写入 include = "~~/xxxxx.conf" 然后mpv.conf的同目录建立这个同名文件

该参数用于在主设置文件后追加读取的设置文件,这样主设置文件只写通用参数,追加的只写配置组。